package com.jdjc.practice.server.config.interceptor;

import com.jdjc.practice.server.config.context.LoginContextHolder;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {

    // 在请求处理之前调用的方法。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        // 从HTTP请求头中获取名为"loginId"的值。
        String loginId = request.getHeader("loginId");
        // 将获取到的loginId存储到LoginContextHolder中。
        LoginContextHolder.set("loginId", loginId);
        return true;
    }

    // 在请求处理之后调用的方法。
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, @Nullable Exception ex) throws Exception {
        // 从LoginContextHolder中移除当前线程的登录信息。
        LoginContextHolder.remove();
    }
}